/**
 * 校园二手书交易平台公共JavaScript函数
 */

// 页面加载进度条
$(document).ready(function() {
    // 预加载功能
    preloadImages();
    
    // 初始化工具提示
    $('[data-toggle="tooltip"]').tooltip();
    
    // 页面加载完成后隐藏加载进度条
    $("#page-loader").fadeOut(500);
});

// 图片预加载函数
function preloadImages() {
    // 预加载常用图标和背景图
    const images = [
        '/booktrading/static/images/default-book.jpg',
        '/booktrading/static/images/loading.gif'
    ];
    
    images.forEach(function(src) {
        const img = new Image();
        img.src = src;
    });
}

// 通用显示警告信息函数
function showAlert(container, type, message, timeout = 5000) {
    var alert = '<div class="alert alert-' + type + ' alert-dismissible fade show" role="alert">' +
        message +
        '<button type="button" class="close" data-dismiss="alert">&times;</button>' +
        '</div>';
    
    $(container).html(alert);
    
    // 自动消失
    if (timeout > 0) {
        setTimeout(function() {
            $(container + ' .alert').alert('close');
        }, timeout);
    }
    
    // 滚动到顶部
    $('html, body').animate({ scrollTop: $(container).offset().top - 100 }, 'fast');
}

// 防抖函数
function debounce(func, wait = 300) {
    let timeout;
    return function(...args) {
        const context = this;
        clearTimeout(timeout);
        timeout = setTimeout(() => func.apply(context, args), wait);
    };
}

// 图片延迟加载
function lazyLoadImages() {
    const lazyImages = document.querySelectorAll('.lazy-load');
    
    if ('IntersectionObserver' in window) {
        const imageObserver = new IntersectionObserver(function(entries, observer) {
            entries.forEach(function(entry) {
                if (entry.isIntersecting) {
                    const img = entry.target;
                    img.src = img.dataset.src;
                    img.classList.remove('lazy-load');
                    imageObserver.unobserve(img);
                }
            });
        });
        
        lazyImages.forEach(function(img) {
            imageObserver.observe(img);
        });
    } else {
        // 回退方案，为不支持IntersectionObserver的浏览器
        lazyImages.forEach(function(img) {
            img.src = img.dataset.src;
            img.classList.remove('lazy-load');
        });
    }
}

// 动态添加书籍卡片列表
function renderBookCards(container, books, template) {
    let html = '';
    
    if (books.length === 0) {
        $(container).html('<div class="col-12"><div class="alert alert-info">没有找到匹配的书籍</div></div>');
        return;
    }
    
    // 使用文档片段提高性能
    const fragment = document.createDocumentFragment();
    
    books.forEach(function(book) {
        const bookCard = document.createElement('div');
        bookCard.className = 'col-md-4 col-sm-6 book-card';
        bookCard.setAttribute('data-status', book.status);
        
        // 使用模板字符串动态生成卡片内容
        bookCard.innerHTML = template
            .replace(/\{id\}/g, book.id)
            .replace(/\{title\}/g, book.title)
            .replace(/\{author\}/g, book.author || '')
            .replace(/\{price\}/g, book.price)
            .replace(/\{imageUrl\}/g, book.imageUrl || '/images/default-book.jpg')
            .replace(/\{statusBadge\}/g, getStatusBadge(book.status))
            .replace(/\{viewCount\}/g, book.views || 0)
            .replace(/\{createTime\}/g, formatDate(book.createTime));
            
        fragment.appendChild(bookCard);
    });
    
    $(container).html('').append(fragment);
    
    // 初始化新添加元素的工具提示
    $(container + ' [data-toggle="tooltip"]').tooltip();
}

// 获取书籍状态徽章
function getStatusBadge(status) {
    switch(parseInt(status)) {
        case 1:
            return '<span class="badge badge-success status-badge">在售</span>';
        case 2:
            return '<span class="badge badge-info status-badge">已售出</span>';
        case 0:
            return '<span class="badge badge-secondary status-badge">已下架</span>';
        default:
            return '';
    }
}

// 格式化日期
function formatDate(dateString) {
    if (!dateString) return '';
    const date = new Date(dateString);
    return date.getFullYear() + '-' + 
           padZero(date.getMonth() + 1) + '-' + 
           padZero(date.getDate());
}

// 补零函数
function padZero(num) {
    return num < 10 ? '0' + num : num;
}

// 书籍状态过滤器
function initBookFilter() {
    $('.nav-tabs .nav-link').click(function(e) {
        e.preventDefault();
        
        // 切换激活状态
        $('.nav-tabs .nav-link').removeClass('active');
        $(this).addClass('active');
        
        const status = $(this).data('status');
        filterBooks(status);
    });
}

// 过滤书籍函数
function filterBooks(status) {
    if (status === 'all') {
        $('.book-card').show();
    } else {
        $('.book-card').hide();
        $('.book-card[data-status="' + status + '"]').show();
    }
    
    // 检查是否有结果
    checkEmptyResults();
}

// 检查空结果
function checkEmptyResults() {
    if ($('.book-card:visible').length === 0) {
        $('#noResults').show();
    } else {
        $('#noResults').hide();
    }
}

// 表单验证函数
function validateBookForm() {
    var isValid = true;
    var errorMessages = [];
    
    // 验证必填字段
    if (!$('#title').val().trim()) {
        errorMessages.push('书籍标题不能为空');
        isValid = false;
    }
    
    if (!$('#price').val() || parseFloat($('#price').val()) <= 0) {
        errorMessages.push('售价必须大于0');
        isValid = false;
    }
    
    if (!$('#condition').val()) {
        errorMessages.push('请选择书籍成色');
        isValid = false;
    }
    
    // 显示错误信息
    if (!isValid) {
        var errorHtml = '<ul class="mb-0">';
        errorMessages.forEach(function(msg) {
            errorHtml += '<li>' + msg + '</li>';
        });
        errorHtml += '</ul>';
        
        showAlert('#alertContainer', 'danger', 
            '<i class="fas fa-exclamation-circle mr-1"></i> 请修正以下错误：' + errorHtml);
            
        // 滚动到顶部显示错误信息
        $('html, body').animate({ scrollTop: $('#alertContainer').offset().top - 100 }, 'fast');
    }
    
    return isValid;
}

// 初始化图片上传功能
function initImageUpload() {
    // 图片上传
    $('#imageUpload').change(function() {
        var file = this.files[0];
        console.log('Selected file:', file);
        
        if (!file) {
            return;
        }
        
        // 验证文件类型
        if (!file.type.match('image/jpeg') && !file.type.match('image/png')) {
            showAlert('#alertContainer', 'danger', '<i class="fas fa-exclamation-circle mr-1"></i> 只支持JPG和PNG格式的图片');
            return;
        }
        
        // 验证文件大小
        if (file.size > 2 * 1024 * 1024) { // 2MB
            showAlert('#alertContainer', 'danger', '<i class="fas fa-exclamation-circle mr-1"></i> 图片大小不能超过2MB');
            return;
        }
        
        // 显示上传进度条
        $('#uploadProgress').show();
        $('#uploadProgressBar').css('width', '0%');
        
        var formData = new FormData();
        formData.append('file', file);
        
        // 发送上传请求
        $.ajax({
            type: 'POST',
            url: '/booktrading/book/upload-image',
            data: formData,
            processData: false,
            contentType: false,
            xhr: function() {
                var xhr = new window.XMLHttpRequest();
                xhr.upload.addEventListener('progress', function(e) {
                    if (e.lengthComputable) {
                        var percent = Math.round((e.loaded / e.total) * 100);
                        $('#uploadProgressBar').css('width', percent + '%');
                    }
                }, false);
                return xhr;
            },
            success: function(response) {
                console.log('Upload response:', response);
                $('#uploadProgress').hide();
                
                if (response.success) {
                    // 更新预览图片
                    $('#imagePreview').attr('src', response.imageUrl);
                    $('#imageUrl').val(response.imageUrl);
                    showAlert('#alertContainer', 'success', '<i class="fas fa-check-circle mr-1"></i> 图片上传成功');
                } else {
                    showAlert('#alertContainer', 'danger', '<i class="fas fa-exclamation-circle mr-1"></i> ' + response.message);
                }
            },
            error: function(xhr, status, error) {
                console.error('Upload error:', {
                    status: status,
                    error: error,
                    response: xhr.responseText
                });
                $('#uploadProgress').hide();
                showAlert('#alertContainer', 'danger', '<i class="fas fa-exclamation-triangle mr-1"></i> 图片上传失败，请稍后再试');
            }
        });
    });
    
    // 删除图片
    $('#removeImage').click(function() {
        $('#imageUpload').val('');
        $('#imageUrl').val('');
        $('#imagePreview').attr('src', '/booktrading/static/images/default-book.jpg');
        showAlert('#alertContainer', 'success', '<i class="fas fa-check-circle mr-1"></i> 图片已删除');
    });
}

// 搜索优化
const initSearch = () => {
    const searchInput = document.getElementById('searchInput');
    if (searchInput) {
        // 使用防抖优化搜索输入
        searchInput.addEventListener('input', debounce(function(e) {
            const query = e.target.value.trim();
            if (query.length > 1) {
                // 显示搜索提示
                fetchSearchSuggestions(query);
            } else {
                // 隐藏搜索提示
                document.getElementById('searchSuggestions').style.display = 'none';
            }
        }, 300));
    }
};

// 获取搜索建议
const fetchSearchSuggestions = (query) => {
    fetch(`/book/suggestions?keyword=${encodeURIComponent(query)}`)
        .then(response => response.json())
        .then(data => {
            const suggestionsContainer = document.getElementById('searchSuggestions');
            
            if (data.length > 0) {
                let html = '<div class="list-group">';
                data.forEach(item => {
                    html += `<a href="/book/detail/${item.id}" class="list-group-item list-group-item-action">
                        <div class="d-flex">
                            <img src="${item.imageUrl || '/images/default-book.jpg'}" class="suggestion-img mr-2">
                            <div>
                                <div class="suggestion-title">${item.title}</div>
                                <small class="text-muted">${item.author || ''} | ¥${item.price}</small>
                            </div>
                        </div>
                    </a>`;
                });
                html += '</div>';
                
                suggestionsContainer.innerHTML = html;
                suggestionsContainer.style.display = 'block';
            } else {
                suggestionsContainer.style.display = 'none';
            }
        })
        .catch(error => console.error('Error fetching suggestions:', error));
};

// 页面切换动画
function initPageTransitions() {
    // 为所有内部链接添加过渡效果
    $(document).on('click', 'a:not([href^="#"]):not([href^="javascript"]):not([href^="mailto"]):not([target="_blank"])', function(e) {
        if (location.hostname === this.hostname || !this.hostname.length) {
            e.preventDefault();
            
            const href = $(this).attr('href');
            
            // 显示页面加载器
            $('#page-loader').fadeIn(300);
            
            // 延迟导航以展示动画
            setTimeout(function() {
                window.location.href = href;
            }, 500);
        }
    });
}

// DOM内容加载完成后执行
document.addEventListener('DOMContentLoaded', function() {
    // 初始化页面过渡
    initPageTransitions();
    
    // 初始化延迟加载图片
    lazyLoadImages();
    
    // 初始化搜索功能
    initSearch();
    
    // 初始化后隐藏加载器
    const loader = document.getElementById('page-loader');
    if (loader) {
        setTimeout(() => {
            loader.classList.add('loader-hidden');
        }, 500);
    }
}); 